#一.序章·检测启动时间
1 | #import <UIKit/UIKit.h> |
1 |
|
##二.序章·启动时间到底怎么算
t(App总启动时间) = t1(main()之前的加载时间) + t2(main()之后的加载时间)。
t1 = 系统dylib(动态链接库)和自身App可执行文件的加载;main()
调用之前的加载过程
App开始启动后, 系统首先加载可执行文件(自身App的所有.o文件的集合),然后加载动态链接库dyld,dyld
是一个专门用来加载动态链接库的库。 执行从dyld
开始,dyld
从可执行文件的依赖开始, 递归加载所有的依赖动态链接库。
动态链接库包括:iOS 中用到的所有系统 framework
,加载OC runtime
方法的libobjc
,系统级别的libSystem
,例如libdispatch(GCD)
和libsystem_blocks (Block)
。
t2 = main方法执行之后到AppDelegate类中的- (BOOL)Application:(UIApplication *)Application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法执行结束前这段时间,主要是构建第一个界面,并完成渲染展示。
一次测试
1 | 2018-03-16 09:43:10.677774+0800 DianJingNet[41750:25192568] ====================t1 |
二次测试
1 | 1521184270.643068 ====================t1 |
测试情况 机型 7plus
一次测试加载时间一共 2.65s
二次测试加载时间一共 1.83 s
app 热启动时间(不加载t1的时间包括动态链接库和可执行.o 文件的)
1次记录 5.37
1次记录 5.38
1次记录 5.28
1次记录 4.94
1次记录 5.12
1次记录 4.84
1次记录 5.1
冷启动时间 5.2
didFinishLaunchingWithOptions
无关代码后使用 textController
的加载时间1 | 1521169741.932117 ====================t1 |
1 | 1521172348.233823 ====================t1 |
rootController初始化 2.07s<br>